In a computer system, the ability to control the allocation of memory resources is vital to the successful operation and scalability of the computer system as a whole. Software applications run more efficiently in environments in which steps are taken to proactively manage available memory resources to ensure that only those entities that are currently being used are stored in memory, while little-used entities are cleanly removed. In some systems, including for example the Java Virtual Machine, the system or virtual machine performs a garbage collection from time to time, meaning in principle that the virtual machine scans the entire memory and finds which objects have been stored in the memory and which objects the program can no longer address. These parts of the memory are returned for later use.
However, current systems of garbage collection are limited in their abilities to clean the memory, and do not adequately respond to variations in the underlying system. What is needed is a more dynamic process that can take into account variations in the system, and which may be incorporated into existing computer system and virtual machine environments.